package com.apicloud.moduleDataDocker;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.json.JSONException;
import org.json.JSONObject;

import com.uzmap.pkg.uzcore.UZWebView;
import com.uzmap.pkg.uzcore.annotation.UzJavascriptMethod;
import com.uzmap.pkg.uzcore.uzmodule.UZModule;
import com.uzmap.pkg.uzcore.uzmodule.UZModuleContext;

/**
 * 该类映射至Javascript中moduleDataDocker对象<br>
 * <br>
 * <strong>Js Example:</strong><br>
 * var module = api.require('moduleDataDocker');<br>
 * module.xxx();
 * 
 */
public class ModuleDataDocker extends UZModule {

	private static List<JSONObject> dataList = Collections.synchronizedList(new ArrayList<JSONObject>());

	public ModuleDataDocker(UZWebView webView) {
		super(webView);
	}

	private boolean add(UZModuleContext context) {
		JSONObject objData = new JSONObject();
		String name = context.optString("name");
		String data = context.optString("data");
		if (name != null && data != null) {
			try {
				objData.put("name", name);
				objData.put("data", data);
				synchronized (dataList) {
					dataList.add(objData);
				}
				return true;
			} catch (JSONException e) {
				e.printStackTrace();
			}
		}

		return false;
	}

	private boolean remove(UZModuleContext context) {
		String name = context.optString("name");
		synchronized (dataList) {
			for (int i = 0; i < dataList.size(); i++) {
				JSONObject objData = dataList.get(i);
				try {
					if (objData.get("name").equals(name)) {
						dataList.remove(i);
						return true;
					}
				} catch (JSONException e) {
					e.printStackTrace();
					break;
				}
			}
		}

		return false;
	}

	/**
	 * <strong>函数</strong><br>
	 * <br>
	 * 该函数映射至Javascript中moduleDataDocker对象的add函数<br>
	 * <br>
	 * <strong>JS Example：</strong><br>
	 * moduleDataDocker.add(UZModuleContext context, function(ret, error){});
	 * 
	 * context = {name:name, data:data}
	 * 
	 */
	@UzJavascriptMethod
	public void jsmethod_add(UZModuleContext context) {
		remove(context);
		if (add(context) == false) {
			context.success("false", false, true);
			return;
		}

		context.success("true", false, true);
	}

	/**
	 * <strong>函数</strong><br>
	 * <br>
	 * 该函数映射至Javascript中moduleDataDocker对象的del函数<br>
	 * <br>
	 * <strong>JS Example：</strong><br>
	 * moduleDataDocker.del(UZModuleContext context, function(ret, error){});
	 * 
	 * context = {name:name}
	 * 
	 */
	@UzJavascriptMethod
	public void jsmethod_del(UZModuleContext context) {
		if (remove(context) == false) {
			context.success("false", false, true);
			return;
		}

		context.success("true", false, true);
	}

	/**
	 * <strong>函数</strong><br>
	 * <br>
	 * 该函数映射至Javascript中moduleDataDocker对象的get函数<br>
	 * <br>
	 * <strong>JS Example：</strong><br>
	 * moduleDataDocker.get(UZModuleContext context, function(ret, error){});
	 * 
	 * context = {name:name}
	 * 
	 */
	@UzJavascriptMethod
	public void jsmethod_get(UZModuleContext context) {
		String name = context.optString("name");
		synchronized (dataList) {
			for (int i = 0; i < dataList.size(); i++) {
				JSONObject ret = dataList.get(i);
				try {
					if (ret.get("name").equals(name)) {
						context.success(ret, true);
						return;
					}
				} catch (JSONException e) {
					e.printStackTrace();
					break;
				}
			}
		}

		context.success("false", false, true);
	}

}
